package com.haoqizhe.kernel.elasticsearch.service;

import com.haoqizhe.kernel.core.entity.PageQuery;
import com.haoqizhe.kernel.core.entity.PageView;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

/**
 * elastic search
 * @author haoqizhe.li
 * @date 2018/9/5
 **/
public interface ICrudEsService <T,PK extends Serializable>{
    /**
     * <p>保存数据进es</p>
     * @param t
     * @author haoqizhe.li
     * @date 2018/5/22
     **/
    void insert(T t);

    /**
     * <p>批量保存数据进es</p>
     * @param list
     * @author haoqizhe.li
     * @date 2018/5/22
     **/
    void insertBatch(List<T> list);
    /**
     * <p>更新es数据</p>
     * @param t
     * @author haoqizhe.li
     * @date 2018/5/22
     **/
    void update(T t);
    /**
     * <p>根据ID删除es数据</p>
     * @param pk
     * @author haoqizhe.li
     * @date 2018/5/22
     **/
    void deleteById(PK pk);

    /**
     * <p>根据对象删除数据</p>
     * @param t
     * @author haoqizhe.li
     * @date 2018/5/22
     **/
    void delete(T t);

    /**
     * <p>删除所有数据</p>
     * @author haoqizhe.li
     * @date 2018/5/22
     **/
    void deleteAll();

    /**
     * <p>根据列表删除数据</p>
     * @param list
     * @author haoqizhe.li
     * @date 2018/5/22
     **/
    void deleteAll(List<T> list);

    /**
     * <p>获取es单条数据</p>
     * @param pk
     * @return T
     * @author haoqizhe.li
     * @date 2018/5/22
     **/
    T get(PK pk);

    /**
     * <p>获取所有数据</p>
     * @return 所有数据
     * @author haoqizhe.li
     * @date 2018/5/22
     **/
    List<T> findAll();

    /**
     * <p>根据ids获取多条数据</p>
     * @param list
     * @return 所有数据
     * @author haoqizhe.li
     * @date 2018/5/22
     **/
    List<T> findAllById(List<PK> list);
    /**
     * <p>查询es数据</p>
     * @param word 查询参数
     * @return T
     * @author haoqizhe.li
     * @date 2018/5/22
     **/
    List<T> findBy(String word);

    /**
     * <p>分页查询es数据</p>
     * @param pageQuery 查询参数
     * @return T
     * @author haoqizhe.li
     * @date 2018/5/22
     **/
    PageView<T> findBy(PageQuery<Map<String, Object>> pageQuery);

    /**
     * 根据单词word分页搜索数据
     * @param word 单词
     * @param pageNum 当前页码
     * @param pageSize 每页数量
     * @return
     */
    PageView<T> findBy(String word,Integer pageNum,Integer pageSize);
}
